Python 数据类型
Python 中常见的数据类型有:
- Number(数字):包括 int(整数)、float(浮点数)、bool(布尔)、complex(复数)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
注意:bool 并不是独立的第七类,它是 int 的子类,属于 Number 的一种。
按可变性划分:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
此外还有 bytes(字节串,不可变)、bytearray(字节数组,可变)等二进制序列类型,用于处理字节数据。
各数据类型的常用方法已拆分为独立文档,见各节末尾的链接。
Number(数字)
Python 支持 int、float、bool、complex(复数)。
在 Python 3 中,bool 是 int 的子类,因此布尔值可以被看作整数来使用,其中 True 等价于 1。
issubclass(bool, int) # True
True + 1 # 2
False + 1 # 1
True == 1 # True
False == 0 # True
Python 3 的 int 没有长度限制(只受内存限制),不会像 C/Java 那样发生溢出。
查询类型可用
type()与isinstance(),详见 逻辑判断。数字类型的数学运算、进制转换、位运算、高精度计算等常用方法,见 Number 常用方法。
String(字符串)
- 单引号
'和双引号"使用完全相同。 - 三引号(
'''或""")可以指定一个多行字符串。 - 转义符
\;在字符串前加 r 可让反斜杠不发生转义,如r"this is a line with \n"则\n会显示,并不会换行。 - 相邻的字符串字面量会自动拼接,如
"this " "is " "string"会被自动转换为this is string。 - 字符串可以用
+连接,用*重复。 - 有两种索引方式:从左往右以 0 开始,从右往左以 -1 开始。
- 字符串是不可变的;Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
- 切片语法
str[start:end:step],start 包含、end 不包含。
s = '123456789' # 避免用内置的 str 作为变量名
print(s) # 输出字符串
print(s[0:-1]) # 第一个到倒数第二个字符
print(s[0]) # 第一个字符
print(s[2:5]) # 从第三个到第六个字符(不包含)
print(s[2:]) # 从第三个开始的所有字符
print(s[1:5:2]) # 从第二个到第五个、每隔一个取一个(步长为 2)
print(s * 2) # 重复字符串
print(s + '你好') # 连接字符串
print('hello\nrunoob') # \n 转义换行
print(r'hello\nrunoob') # 原始字符串,不转义
字符串的常用方法(大小写转换、拆分连接、查找替换、格式化等),见 String 常用方法。
List(列表)
列表是有序、可变的序列,可以存放任意类型的元素,支持索引、切片、追加、删除等操作。
# 创建列表
fruits = ['apple', 'banana', 'cherry']
mixed = [1, 'hello', True, 3.14, [1, 2]] # 可以混合类型
empty = []
# 索引访问(和字符串规则一致,支持负索引)
print(fruits[0]) # apple
print(fruits[-1]) # cherry
# 切片
print(fruits[0:2]) # ['apple', 'banana']
print(fruits[::-1]) # ['cherry', 'banana', 'apple'],反转列表
列表的增删改查、排序、列表推导式等常用方法,见 List 常用方法。
Tuple(元组)
元组是有序、不可变的序列,一旦创建就不能增删改元素,适合存放固定不变的数据。
# 创建元组
colors = ('red', 'green', 'blue')
single = ('only',) # 单元素元组必须带逗号,('only') 只是字符串
empty = ()
packed = 1, 2, 3 # 甚至可以不加括号
# 支持索引和切片,规则与列表一致
print(colors[0]) # red
print(colors[1:]) # ('green', 'blue')
# 解包(Unpacking)
r, g, b = colors
print(r, g, b) # red green blue
# 不可变:修改会报错
# colors[0] = 'pink' # TypeError: 'tuple' object does not support item assignment
元组只有
index()、count()两个查询方法,见 Tuple 常用方法。
Set(集合)
集合是无序、可变、元素唯一的容器,底层基于哈希表实现,适合去重和快速成员判断。
# 创建集合(自动去重)
unique_numbers = {1, 2, 3, 2, 1} # 实际存储 {1, 2, 3}
from_list = set([1, 2, 2, 3]) # {1, 2, 3}
empty = set() # 空集合必须用 set(),{} 是空字典
# 成员判断,平均 O(1)
print(2 in unique_numbers) # True
集合的增删方法、并交差等集合运算与 frozenset,见 Set 常用方法。
Dictionary(字典)
字典是可变的键值对映射,键必须唯一且不可变(如 str、int、tuple),值可以是任意类型。Python 3.7+ 的字典保持插入顺序。
# 创建字典
person = {
'name': 'John',
'age': 30,
'city': 'New York'
}
empty = {}
# 读取:键不存在会报 KeyError
print(person['name']) # John
# 新增 / 修改
person['email'] = 'john@example.com'
person['age'] = 31
# 删除
del person['email']
# 判断键是否存在
print('name' in person) # True
字典的
get()、pop()、update()、setdefault()等常用方法与遍历技巧,见 Dictionary 常用方法。
六大标准类型速查表
| 类型 | 创建示例 | 有序 | 可变 | 允许重复 | 成员判断 | 典型场景 |
|---|---|---|---|---|---|---|
| Number | 42, 3.14 | — | 否 | — | — | 数值计算 |
| String | 'hello' | 是 | 否 | 是 | O(n) | 文本处理 |
| List | [1, 2, 3] | 是 | 是 | 是 | O(n) | 有序、可变的元素集合 |
| Tuple | (1, 2, 3) | 是 | 否 | 是 | O(n) | 固定数据、函数多返回值 |
| Set | {1, 2, 3} | 否 | 是 | 否(去重) | O(1) | 去重、快速成员判断 |
| Dictionary | {'a': 1} | 是(3.7+) | 是 | 是(键唯一) | O(1) | 键值映射、JSON 数据 |
选型建议:
- 需要下标访问、允许重复 → List
- 数据固定不变 → Tuple
- 需要去重或快速判断成员 → Set
- 需要键值对映射 → Dictionary